package cn.lycode.common.utils;


import cn.lycode.common.core.service.Treeable;

import java.lang.reflect.InvocationTargetException;

/**
 * 树形递归，用于构建以id、pid为关联标识的树形结构
 * 需要List中包含children
 * @ClassName TreeUtil
 */
public class TreeUtils {

    /**
     * 获取根节点
     *
     * @param clazz 树节点类型
     * @param <T>   树节点类型
     * @return 根节点
     */
    public static <T extends Treeable<T>> T getRoot(Class<T> clazz) {
        try {
            T root = clazz.getDeclaredConstructor().newInstance();
            clazz.getMethod("setId", Long.class).invoke(root, 0L);
            clazz.getMethod("setPid", Long.class).invoke(root, -1L);
            return root;
        } catch (InstantiationException | IllegalAccessException e) {
            // 处理异常
            return null;
        } catch (InvocationTargetException | NoSuchMethodException e) {
            throw new RuntimeException(e);
        }
    }


}
